/*
 * @lc app=leetcode.cn id=94 lang=typescript
 *
 * [94] 二叉树的中序遍历
 */

// @lc code=start
/**
 * Definition for a binary tree node.
 * class TreeNode {
 *     val: number
 *     left: TreeNode | null
 *     right: TreeNode | null
 *     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.left = (left===undefined ? null : left)
 *         this.right = (right===undefined ? null : right)
 *     }
 * }
 */

// 前序遍历，从根开始，左侧优先于右侧输出
// 中序遍历，从左开始，根优先于右侧
// 后序遍历, 从最左侧开始，左 - 右 - 根
function inorderTraversal(root: TreeNode | null): number[] {
    if (root === null) return [];
    let result: number[] = [root.val];
    // 只要中序遍历 左侧结果出现于前面即可。
    if (root.left) result.unshift(...inorderTraversal(root.left));
    if (root.right) result.push(...inorderTraversal(root.right));
    return result;
}
// @lc code=end
